#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 2e5+10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define sd(n) scanf("%d",&n)
#define sld(n) scanf("%lld",&n)
#define pd(n) printf("%d", (n))
#define pld(n) printf("%lld", n)

//----------------------------------------------------------------------------//
 int n, m;
 int g[110][110];
// ll d[110][110];
// int q[110][3];
// int bfs()
// {
// 	int hh = 0, tt = 0;
// 	q[1][1]=1;
// 	q[1][2]=1;

// 	memset(d, -1, sizeof d);

// 	d[1][1]=0;

// 	int dx[]={0,1};
// 	int dy[]={1,0};
// 	while(hh<=tt)
// 	{
// 		int sx=q[hh][1];
// 		int sy=q[hh][2];
// 		for(int i=0;i<2;i++)
// 		{
// 			int x=sx+dx[i];
// 			int y=sy+dy[i];
// 			if(x>=1&&x<=n&&y>=1&&y<=m)
// 			{

// 			}
// 		}

//  	}

// }


ll mx = 0;
ll d[110][110];
int dx[] = {0, 1};
int dy[] = {1, 0};
void dfs(int sx, int sy, ll cur)
{   
    d[sx][sy]=cur;
	if(sx==n&&sy==m)
	{
		if(cur>mx) mx=cur;
		return;
	}
    for(int i = 0; i < 2; i++)
    {
        int x = sx + dx[i];
        int y = sy + dy[i];
        if(x >= 1 && x <= n && y >= 1 && y <= m)
        {
            if(cur+g[x][y]<d[x][y]) continue;
            else dfs(x,y,cur+g[x][y]);
        }
    }
    
}
int main()
{
    sd(n);
    sd(m);
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            sd(g[i][j]);
        }
    }

    //ll ans=bfs();
    dfs(1, 1, g[1][1]);

    pld(mx);
    return 0;
}
//向下或者向右